package com.tlias.coutroller;

import com.tlias.entity.Emp;
import com.tlias.entity.EmpQueryParam;
import com.tlias.entity.PageBean;
import com.tlias.entity.Result;
import com.tlias.service.EmpService;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import java.util.List;

//@Slf4j
@RestController
public class EmpController {
    private static final Logger log = LoggerFactory.getLogger(DeptController.class);//日志代替不生效的//@Slf4j
@Resource(name = "empServicelmpl")
//    @Autowired
    private EmpService empService;
    /*
     *分页查询
     * @param page 当前页码
     * @param pageSize 每页显示记录数
     * @return
     * */
    //完整版本
    @GetMapping("/emps")
    public Result page(EmpQueryParam Param) {
        //EmpQueryParam类里封装了查询参数所以只需要传个实体类就可以了
        log.info("查询了 {} {} {} {} {} {} ",  Param.getPage(), Param.getPageSize(), Param.getName(), Param.getGender(), Param.getBegin(), Param.getEnd());
        PageBean pageBean = empService.page(Param);
        return Result.success(pageBean);
    }
    //添加员工
    @PostMapping("/emps")//接受的参数是JSON数据所以要用@RequestBody接受
    public Result insertStaff(@RequestBody Emp emp) throws Exception {
        log.info("添加员工{}", emp);
        empService.insertStaff(emp);
        return Result.success();
    }
    //删除员工
    @DeleteMapping("/emps")
//    public Result deleteStaff( Integer[] ids)//使用数组接收参数
    public Result deleteStaff(@RequestParam List<Integer> ids) {//使用List集合接收参数,使用集合接受参数时必须使用@RequestParam注解
        //通过 @RequestParam，可以方便地从 HTTP 请求中提取用户输入的数据并进行处理。
        log.info("删除员工:ids={}", ids);
        empService.deleteStaff(ids);
        return Result.success();
    }
    //根据id查询员工
    @GetMapping("/emps/{id}")//@PathVariable 是 Spring MVC 中的一个注解，{id}对应@PathVariable Integer id中的id
    // 用于从 URI 模板中提取路径变量的值。它通常用于 RESTful Web 服务中，将 URL 中的部分路径映射到方法参数上。
    public Result getById(@PathVariable Integer id) {
        log.info("查询员工id为{}", id);
        Emp emp = empService.getById(id);
        return Result.success(emp);
    }
    //修改员工
    @PutMapping("/emps")
    public Result update(@RequestBody Emp emp) {
        log.info("修改员工{}", emp);
        empService.update(emp);
        return Result.success();
    }
    //查询所有员工
    @GetMapping("/emps/list")
    public Result findAllList() {
        log.info("查询所有员工信息");
        List<Emp> empList = empService.findAllList();
        return Result.success(empList);
    }

    //测试版本只有两个参数
//    @GetMapping("/emps")
//    public Result page(Integer page, Integer pageSize) {
//        log.info("查询所有员工信息");
//        log.info("当前页码：{}", page);
//        log.info("每页显示记录数：{}", pageSize);
//        PageBean pageBean = empService.page(page, pageSize);//
//        return Result.success(pageBean);
//    }
}
